#include <iostream>
#include <unistd.h>
#include <cstdlib>
using namespace std;
int main()
{
 // fork的验证 
 // int ret = fork();
 // std::cout << "ret =" << ret << ",proc =" << getpid() << " " << "parent =" << getppid() << std::endl;
 // sleep(1);
 
 // fork的if分支
 // cout << "I am parent: pid =" << getpid() << ",ppid =" << getppid() << endl;
 // pid_t ret = fork();
 // if(ret == 0)
 // {
 //   while(1)
 //   {
 //     cout << "I am child: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
 //     sleep(1);
 //   }
 // }
 // else if(ret > 0)
 // {
 //   while(1)
 //   {
 //     cout << "I am parent: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
 //     sleep(2); 
 //   }
 // }
 // else
 // {
 //   
 // }
 // sleep(1);
 // fork-> R
 // while(1);

 // fork的子进程出现S状态
 // while(1)
 // {
 //   sleep(2);
 //   cout << "S+ -> state " << endl;
 // }

 // fork的子进程出现T状态
 // kill -20 PID 暂停
 // kill -18 PID 恢复
 
 // fork的子进程出现僵尸状态（子进程先退出，父进程未收到子进程的状态码）
 // pid_t ret = fork();
 // if(ret > 0)
 // {
 //   while(1)
 //   {
 //     cout << "I am parent: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
 //     sleep(2);
 //   }
 // }
 // else if(ret == 0)
 // {
 //   while(1)
 //   {
 //     cout << "I am child: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
 //     sleep(20);
 //     exit(1);
 //   }
 // }
 // else
 // {
 //   exit(1);
 // }
 // sleep(1);
 
 // fork的子进程出现孤儿进程（父进程先结束）  
  pid_t ret = fork();
  if(ret > 0)
  {
      cout << "I am parent: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
      sleep(10);
      exit(1);
  }
  else if(ret == 0)
  {
    while(1)
    {
      cout << "I am child: pid =" << getpid() << ",ppid =" << getppid() << ",ret =" << ret << endl;
      sleep(1);
    }
  }
  else
  {
    exit(1);
  }
  sleep(1);
  return 0;
}
